package math;

/**
 * @Author G_Y
 * @Date 2021/5/7 15:41
 * @Description: // TODO
 **/

import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 对于一个字符串，请设计一个高效算法，计算其中最长回文子串的长度。
 * <p>
 * 给定字符串A以及它的长度n，请返回最长回文子串的长度。
 * <p>
 * 示例1
 * 输入
 * 复制
 * "abc1234321ab",12
 * 返回值
 * 复制
 * 7
 */
public class Soluthion {
//    public static void main(String[] args) {
//        int len = new Soluthion().getLongestPalindrome("abc1234321ab", 12);
//        System.out.println(len);
//    }

    public int getLongestPalindrome(String A, int n) {
        // write code here
        Map<Character, Map> form = form(A, new HashMap());
        String aRevert = revertStr(A, n);

        return 0;
    }

    public String revertStr(String a, int n) {
        char[] aChars = a.toCharArray();
        StringBuilder sb = new StringBuilder(a);
        for (int i = n - 1; i >= 0; i--) {
            sb.append(aChars[i]);
        }
        return sb.toString();
    }

    public Map<Character, Map> form(String a, Map map) {
        if (StringUtils.isEmpty(a)) {
            throw new IllegalArgumentException();
        }
        if (a.length() == 1) {
            map.put(a.toCharArray()[0], null);
            return map;
        }
        char[] chars = a.toCharArray();
        HashMap<Object, Object> charMap = new HashMap<>();
        map.put(chars[0], form(a.substring(1, a.length()), charMap));
        return map;
    }

    /**
     * @Author G_Y
     * @Description: TODO
     * @Date 2021/5/7 16:03
     * 输入一个链表，反转链表后，输出新链表的表头。
     * 示例1
     * 输入
     * 复制
     * {1,2,3}
     * 1 断开指向null； 2断开指向1； 3断开指向2
     * 返回值
     * 复制
     * {3,2,1}
     **/
    public static ListNode reverseList(ListNode head) {
        ListNode pre = null; // 前一个
        ListNode cur = head; // 当前
        ListNode next;       // 下一个
        while (cur != null) {
            next = cur.next; // next = 当前的下一个
            cur.next = pre;  // 当前的下一个 = 前一个
            pre = cur;       // 当前成了前一个
            cur = next;      // 下一个成了当前
        }
//        1 断开指向null； 2断开指向1； 3断开指向2
        return pre;  // 如果当前为null 返回前一个
    }

    public static void main(String[] args) {
        ListNode head = new ListNode(1);
        ListNode second = new ListNode(2);
        ListNode third = new ListNode(3);
        head.next = second;
        second.next = third;
        ListNode listNode = reverseList(head);
        System.out.println(listNode);
    }

    public void changeListNodeRelation(ListNode before, ListNode after) {

    }

    public static class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
}
